<?php

 class __kernel_blocks {
 
	var $js;
	var $urls = array(
		"default" => "autorun",
		"autorun" => "autorun"
	);
 	
    static $prepare = -1;
	
	public function autorun($args=array()) {

		self::$prepare++;
		if(self::$prepare > 1) exit('__kernel_block cannot run >2');
		
		
		drv(DISP)->assign("block", array());
		
		$res=drv(DB)->query("SELECT * FROM blocks WHERE `prepare` = ".(int)self::$prepare." ORDER BY `sort` ASC");
		
        while ($array=&$res->fetchRow(DB_FETCHMODE_ASSOC)) {
			// Проверим условие вывода, указанное в таблице блоков, если оно не вернуло true, блок выполнен не будет
				if($array['iftrue']) if(eval($array['iftrue']) !== true) continue;
				
			// Проверим возможность доступа пользователя к блоку
				if(drv(ACSGP)->doIHaveAccess($array['access']) !== true) continue;
				
			$b = $this->start_block($array['module_name'], $array['blockname'], $array['template'], $array['locate']);
		}
		
	}
	
	public function start_block($modulename, $blockname, $template = NULL, $locate = false) {
		global $init;
		
		// Если есть, добавим заголовок блока
			if(glang($modulename, "block_{$blockname}_title")) $array['title'] = glang($modulename, "block_{$blockname}_title");
			
		$blockprint = &__kernel_start::block($modulename, $blockname);
		
		// Если $locate принял значение false, значит нужно вернуть результат работы блока без каких-либо дополнительных обработок
			if($locate === false) return $blockprint;
		
		// Если блок хочет невыполняться, не выполним его
			if($blockprint == false) return false;
		
		// Определимся с шаблоном
			if($template == NULL)
				$template = drv(DISP)->getBlockTemplate();
			else $template = "block-".$template.".html";
				
		if(is_array($blockprint) && $blockprint['body'] != "") {
			// Заменим заголовок блока, если нужно
				if($blockprint['title']    != "") $array['title']  = $blockprint['title'];
			// Дополним заголовок блока, если нужно
				if($blockprint['titleAdd'] != "") $array['title'] .= $blockprint['titleAdd'];
			// Передадим произвольные аргументы, если нужно
				if(is_array($blockprint['args'])) $block['args']   = $blockprint['args'];
			
			$blockprint = $blockprint['body'];
		}
		
		// Завершим подготовку вывода блока
			$block['title'] = $array['title'];
			$block['body']  = $blockprint;
		
		drv(DISP)->assign("block", $block);
		
		$init['class']->display[$locate] .= drv(DISP)->fetch($template);
		return true;
	}
	
 }

?>
